package com.leetcode.dynamic_programming;

/**
 * @author Dennis Li
 * @date 2020/7/19 16:44
 */
public class IntegerBreak_343 {

    public int integerBreak(int n) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < i; j++) {
                // 还少了一步，拆成两个数的比较
                dp[i] = Math.max(dp[i], Math.max((i - j) * j, dp[i - j] * j));
            }
        }
        return dp[n];
    }

    public int integerBreak2(int n) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < i; j++) {
                // 基于拆分个数进行比较
                // (i - j) * j -- 拆分成两个数
                // dp[i - j] * j -- 在两个数的基础之上再进行拆分
                dp[i] = Math.max(dp[i], Math.max((i - j) * j, dp[i - j] * j));
            }
        }
        return dp[n];
    }

}
